package 泛型;

//如何使用Java泛型接口
//
//语法
//这是一个泛型接口的泛型语法：interface interface-name<type-param-list> { // ...
//type-param-list是逗号分隔的类型参数列表。当实现泛型接口时，必须指定类型参数，如下所示:
//
//class class-name<type-param-list> 
//   implements interface-name<type-arg-list> {
//注意
//一般来说，如果一个类实现了一个泛型接口，那么该类也必须是泛型的。如果一个类实现了一个特定类型的泛型接口，如下所示:
//
//class MyClass implements MinMax<Integer> { // OK
//
//那么实现类不需要是泛型的。
//
//泛型接口类似泛型类。
//
//例子
interface MinMax<T extends Comparable<T>> {
  T max();
}
class MyClass1<T extends Comparable<T>> implements MinMax<T> {
  T[] vals;
  MyClass1(T[] o) {
    vals = o;
  }
  public T max() {
    T v = vals[0];
    for (int i = 1; i < vals.length; i++) {
      if (vals[i].compareTo(v) > 0) {
        v = vals[i];
      }
    }
    return v;
  }
}

public class InterfaceTest {
  public static void main(String args[]) {
    Integer inums[] = { 3, 6, 2, 8, 6 };
    Character chs[] = { 'b', 'r', 'p', 'w' };
    MyClass1<Integer> a = new MyClass1<Integer>(inums);
    MyClass1<Character> b = new MyClass1<Character>(chs);
    System.out.println(a.max());
    System.out.println(b.max());
  }
}